package com.jsz.peini.controller.app;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.jsz.peini.bean.user.UserInfo;
import com.jsz.peini.bean.user.UserSms;
import com.jsz.peini.bean.user.UserSmsExample;
import com.jsz.peini.common.util.DateTimeUtils;
import com.jsz.peini.common.util.PeiniUtils;
import com.jsz.peini.mapper.user.UserInfoMapper;
import com.jsz.peini.mapper.user.UserSmsMapper;

/**
 * @author Han Guohong
 * @version 2017-2-27 下午3:07:42
 * 类说明
 */
@Controller
public class UserSmsController {
	private static final Logger logger = LoggerFactory.getLogger(UserSmsController.class);
	@Resource
	private UserSmsMapper userSmsMapper;
	@Resource
	private UserInfoMapper userInfoMapper;
	
	@ResponseBody
	@RequestMapping(value="/getUserSmsCnt",produces="text/plain;charset=UTF-8")
	public String getUserSmsCnt(HttpServletRequest request,HttpServletResponse response,
			@RequestParam(value = "userId") String userId,
			@RequestParam(value = "type",required=false) Integer type  //1系统消息；2小秘书；不传所有
			){
		
		JSONObject object = new JSONObject();
		JSONArray array = new JSONArray();
		try {
			
			JSONObject obj = PeiniUtils.validToken(userId);
			if(obj.getInteger("resultCode") != 1){
				return obj.toJSONString();
			}
			userId = obj.getString("userId");
			
			UserSmsExample example = new UserSmsExample();
			List<Integer> statusList = new ArrayList<Integer>();
			if(type != null && type == 1){
				statusList.add(1);
				statusList.add(2);
				statusList.add(3);
				statusList.add(4);
				statusList.add(5);
				statusList.add(6);
				statusList.add(7);
				statusList.add(8);
				statusList.add(10);
				statusList.add(101);
				statusList.add(102);
				statusList.add(103);
				statusList.add(104);
				statusList.add(105);
				statusList.add(106);
				statusList.add(107);
				statusList.add(108);
				statusList.add(109);
				statusList.add(110);
				statusList.add(111);
				statusList.add(112);
				statusList.add(113);
				statusList.add(114);
				statusList.add(115);
				statusList.add(116);
			}else if(type != null && type == 2){
				statusList.add(201);
				statusList.add(202);
				statusList.add(203);
				statusList.add(204);
				statusList.add(205);
				statusList.add(206);
				statusList.add(207);
				statusList.add(208);
				statusList.add(209);
				statusList.add(210);
				statusList.add(211);
				statusList.add(212);
			}else{
				statusList.add(1);
				statusList.add(2);
				statusList.add(3);
				statusList.add(4);
				statusList.add(5);
				statusList.add(6);
				statusList.add(7);
				statusList.add(8);
				statusList.add(10);
				statusList.add(101);
				statusList.add(102);
				statusList.add(103);
				statusList.add(104);
				statusList.add(105);
				statusList.add(106);
				statusList.add(107);
				statusList.add(108);
				statusList.add(109);
				statusList.add(110);
				statusList.add(111);
				statusList.add(112);
				statusList.add(113);
				statusList.add(114);
				statusList.add(115);
				statusList.add(116);
				
				statusList.add(201);
				statusList.add(202);
				statusList.add(203);
				statusList.add(204);
				statusList.add(205);
				statusList.add(206);
				statusList.add(207);
				statusList.add(208);
				statusList.add(209);
				statusList.add(210);
				statusList.add(211);
				statusList.add(212);
			}
			
			example.createCriteria().andSmstypeIn(statusList).andToidEqualTo(userId).andIsremindEqualTo(1);
			example.setOrderByClause("sendTime desc");
			List<UserSms> remindList = userSmsMapper.selectByExampleWithBLOBs(example);
			
			object.put("newMsg",remindList.size());
			object.put("code", 1);
			object.put("msg", "success");
		} catch (Exception e) {
			object.put("code", 99);
			object.put("msg", "网络异常");
			logger.error(e.getMessage(),e);
		}
		return object.toString();
	}
	
	@ResponseBody
	@RequestMapping(value="/getUserSmsList",produces="text/plain;charset=UTF-8")
	public String getUserSmsList(HttpServletRequest request,HttpServletResponse response,
			@RequestParam(value = "userId") String userId,
			@RequestParam(value = "page",defaultValue="1") Integer page,
			@RequestParam(value = "rows",defaultValue="10") Integer rows
			){
		
		JSONObject object = new JSONObject();
		JSONArray array = new JSONArray();
		try {
			
			JSONObject obj = PeiniUtils.validToken(userId);
			if(obj.getInteger("resultCode") != 1){
				return obj.toJSONString();
			}
			userId = obj.getString("userId");
			
			Page<?> p = PageHelper.startPage(page,rows);
			UserSmsExample example = new UserSmsExample();
			List<Integer> statusList = new ArrayList<Integer>();
			statusList.add(1);
			statusList.add(2);
			statusList.add(3);
			statusList.add(4);
			statusList.add(5);
			statusList.add(6);
			statusList.add(7);
			statusList.add(8);
			statusList.add(10);
			statusList.add(101);
			statusList.add(102);
			statusList.add(103);
			statusList.add(104);
			statusList.add(105);
			statusList.add(106);
			statusList.add(107);
			statusList.add(108);
			statusList.add(109);
			statusList.add(110);
			statusList.add(111);
			statusList.add(112);
			statusList.add(113);
			statusList.add(114);
			statusList.add(115);
			statusList.add(116);
			example.createCriteria().andSmstypeIn(statusList).andToidEqualTo(userId);
			example.setOrderByClause("sendTime desc");
			List<UserSms> list = userSmsMapper.selectByExampleWithBLOBs(example);
			
			List<String> idList = new ArrayList<String>();
			for (UserSms sms : list) {
				net.sf.json.JSONObject obj1 = net.sf.json.JSONObject.fromObject(sms);
				obj1.put("sendTime", DateTimeUtils.formatDateTime2String(sms.getSendtime(), "MM-dd HH:mm"));
				obj1.remove("sendtime");
				/*if(sms.getIsremind() == 1){
					obj1.put("isRemind",1);
					sms.setIsremind(0);
					userSmsMapper.updateByPrimaryKey(sms);
				}else{
					obj1.put("isRemind",0);
				}*/
				obj1.put("isRemind",0);
				switch (sms.getSmstype()) {
				case 1:
					obj1.put("title", "任务接取通知");
					obj1.put("from", "");
					break;
				case 2:
					obj1.put("title", "任务取消通知");
					if(StringUtils.isNotBlank(sms.getFromid())){
						UserInfo userInfo = userInfoMapper.selectByPrimaryKey(sms.getFromid());
						if(userInfo != null){
							obj1.put("from", StringUtils.trimToEmpty(userInfo.getUserPhone()));
						}else{
							obj1.put("from", "");
						}
					}else{
						obj1.put("from", "");
					}
					break;
				case 4:
					obj1.put("title", "任务取消通知");
					obj1.put("from", "");
					break;
				case 6:
					obj1.put("title", "任务完成通知");
					obj1.put("from", "");
					break;
				case 10:
					obj1.put("title", "优惠券通知");
					obj1.put("from", "");
					break;
				case 101:
					obj1.put("title", "买单成功通知");
					obj1.put("from", "");
					break;
				case 102:
					obj1.put("title", "评价成功通知");
					obj1.put("from", "");
					break;
				case 103:
					obj1.put("title", "任务发布成功");
					obj1.put("from", "");
					break;
				case 104:
					obj1.put("title", "任务付款通知");
					obj1.put("from", "");
					break;
				case 107:
					obj1.put("title", "任务评价通知");
					obj1.put("from", "");
					break;
				case 108:
					obj1.put("title", "任务自动取消通知");
					obj1.put("from", "");
					break;
				case 109:
					obj1.put("title", "任务自动取消通知");
					obj1.put("from", "");
					break;
				case 111:
					obj1.put("title", "金币赠送通知");
					obj1.put("from", "");
					break;
				case 112:
					obj1.put("title", "金币转账成功");
					obj1.put("from", "");
					break;
				case 113:
					obj1.put("title", "积分获赠通知");
					obj1.put("from", "");
					break;
				case 114:
					obj1.put("title", "积分消耗通知");
					obj1.put("from", "");
					break;
				case 116:
					obj1.put("title", "任务倒计时提醒");
					obj1.put("from", "");
					break;
				default:
					break;
				}
				
				idList.add(sms.getSmsid());
				
				array.add(obj1);
			}
			if(p.getTotal()/rows+1 < page){
				object.put("data", new JSONArray());
			}else{
				object.put("data", array);
			}
			
			if(idList.size()!=0){
				userSmsMapper.cancelSmsRemind(idList);
			}
			
			object.put("code", 1);
			object.put("msg", "success");
		} catch (Exception e) {
			object.put("code", 99);
			object.put("msg", "网络异常");
			logger.error(e.getMessage(),e);
		}
		//logger.info(object.toJSONString());
		return object.toString();
	}
}
